﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using iTextSharp.text;
using iTextSharp.text.pdf;

namespace AffordoPlugin.Print
{
	public class ItextPrintUtil
	{

		public const float CM_1 = 28.3F; //1cm = 28.3像素
		public const float INCH_1 = 2.54F; //1英寸=2.54cm

		public static void Test(Stream ss) {
			var doc = new Document();

			var memoryStream = new MemoryStream();

		//	PdfWriter.GetInstance(doc, memoryStream);

			PdfWriter.GetInstance(doc,new FileStream("E://test.pdf",FileMode.Create) );

			doc.Open();

			doc.Add(Image.GetInstance(ss));

			doc.Close();
		}

		//public List<string> GetPrintDevice()
		//{
		//	//var printDevices = new List<string>();

		//	//foreach (var printer in PrinterSettings.InstalledPrinters)
		//	//{
		//	//	printDevices.Add(printer.ToString());
		//	//}

		//	//return printDevices;

		//	PdfPCell
		//}

		//public bool Print(Message<PrintContent> message)
		//{
		//	try
		//	{
		//		var printer = ConfigurationHelper.GetAppSettingValue("Printer");
		//		message.content.device = string.IsNullOrEmpty(message.content.device) ? printer : message.content.device;

		//		var success = true;
		//		switch (message.content.dataType)
		//		{
		//			case DataTypeEnum.File:
		//				{
		//					success = PrintFile(message);
		//				}
		//				break;
		//			case DataTypeEnum.Html:
		//				{
		//					success = PrintHtml(message);
		//				}
		//				break;
		//			case DataTypeEnum.Url:
		//				{
		//					success = PrintUrl(message);
		//				}
		//				break;
		//		}

		//		return success;
		//	}
		//	catch (Exception ex)
		//	{
		//		LogHelper.Error("Print异常" + ex.Message + ex.InnerException?.Message ?? "");

		//		return false;
		//	}
		//}

		//private bool PrintFile(Message<PrintContent> message)
		//{
		//	var pdf = new PdfDocument();
		//	try
		//	{
		//		if (message.content.fileType == FileTypeEnum.IMG)
		//		{
		//			var pdfImage = PdfImage.FromFile(message.content.body);

		//			pdf.PageSettings.Width = message.content.width == 0 ? pdfImage.Width : message.content.width * CM_1;
		//			pdf.PageSettings.Height = message.content.height == 0 ? pdfImage.Height : message.content.height * CM_1;

		//			var width = pdf.PageSettings.Width;
		//			var height = pdf.PageSettings.Height;

		//			var page = pdf.Pages.Add();



		//			page.Canvas.DrawImage(pdfImage, new PointF() { X = 0, Y = 0 }, new Size { Width = (int)(width * 0.9f), Height = (int)(height * 0.9f) });
		//		}
		//		else if (message.content.fileType == FileTypeEnum.IMGBASE64)
		//		{
		//			var index = message.content.body.IndexOf("base64,");
		//			var base64 = message.content.body.Substring(index + 7);
		//			var ms = new MemoryStream(Convert.FromBase64String(base64));

		//			var pdfStream = ImgToPDF.ImgToPDFStream(ms);

		//			pdf.LoadFromStream(pdfStream);

		//			//	var pdfImage = PdfImage.FromStream(ms);



		//			//	pdf.PageSettings.Width =  message.content.width == 0 ? pdfImage.Width : message.content.width * CM_1;
		//			//	pdf.PageSettings.Height =  message.content.height == 0 ? pdfImage.Height : message.content.height * CM_1;

		//			//	var width = 600; //pdf.PageSettings.Width;
		//			//	var height = 600; //pdf.PageSettings.Height;

		//			//	var page = pdf.Pages.Add();

		//			//	page.Canvas.DrawImage(pdfImage, new RectangleF(0,0,300,150));
		//		}
		//		else
		//		{
		//			pdf.LoadFromFile(message.content.body);
		//		}



		//		//pdf.SaveToFile("E://aa.pdf");

		//		if (message.content.paperHeight > 0 && message.content.paperWidth > 0)
		//		{
		//			PaperSize paper = new PaperSize("Custom", (int)(message.content.paperWidth / INCH_1 * 100), (int)(message.content.paperHeight / INCH_1 * 100));
		//			paper.RawKind = (int)PaperKind.Custom;
		//			pdf.PrintSettings.PaperSize = paper;
		//		}

		//		pdf.SaveToFile("E://aaaa.pdf");

		//		pdf.PrintSettings.PrinterName = message.content.device;
		//		pdf.PrintSettings.Copies = message.content.printQty;
		//		pdf.PrintSettings.PrintController = new StandardPrintController();
		//		pdf.PrintSettings.SelectSinglePageLayout(PdfSinglePageScalingMode.FitSize, false);
		//		//pdf.Preview()

		//		pdf.Print();

		//		return true;
		//	}
		//	catch (Exception ex)
		//	{
		//		LogHelper.Error("PrintFile异常" + ex.Message + ex.InnerException?.Message ?? "");

		//		return false;
		//	}
		//	finally
		//	{
		//		pdf?.Close();
		//		pdf?.Dispose();
		//	}
		//}

		//private bool PrintHtml(Message<PrintContent> message)
		//{
		//	var pdf = new PdfDocument();
		//	try
		//	{
		//		//加载几页
		//		var pdfPageSetting = new PdfPageSettings();

		//		if (message.content.width > 0)
		//		{
		//			pdfPageSetting.Width = message.content.width * CM_1;
		//		}

		//		if (message.content.height > 0)
		//		{
		//			pdfPageSetting.Height = message.content.height * CM_1;
		//		}

		//		var pdfFormat = new PdfHtmlLayoutFormat
		//		{
		//		};

		//		var thread = new Thread(() =>
		//		{
		//			pdf.LoadFromHTML(message.content.body, false, pdfPageSetting, pdfFormat);

		//		});
		//		// set to single thread
		//		thread.SetApartmentState(ApartmentState.STA);
		//		thread.Start();
		//		thread.Join();

		//		if (message.content.paperHeight > 0 && message.content.paperWidth > 0)
		//		{
		//			PaperSize paper = new PaperSize("Custom", (int)(message.content.paperWidth / INCH_1 * 100), (int)(message.content.paperHeight * 100));
		//			paper.RawKind = (int)PaperKind.Custom;
		//			pdf.PrintSettings.PaperSize = paper;
		//		}

		//		//pdf.SaveToFile("D://aa.pdf");

		//		pdf.PrintSettings.PrinterName = message.content.device;
		//		pdf.PrintSettings.Copies = message.content.printQty;
		//		pdf.PrintSettings.PrintController = new StandardPrintController();
		//		pdf.PrintSettings.SelectSinglePageLayout(PdfSinglePageScalingMode.FitSize, false);

		//		pdf.Print();

		//		return true;
		//	}
		//	catch (Exception ex)
		//	{
		//		LogHelper.Error("PrintFile异常" + ex.Message + ex.InnerException?.Message ?? "");

		//		return false;
		//	}
		//	finally
		//	{
		//		pdf?.Close();
		//		pdf?.Dispose();
		//	}
		//}

		//private bool PrintUrl(Message<PrintContent> message)
		//{
		//	var pdf = new PdfDocument();
		//	try
		//	{
		//		//非文件，图片的
		//		if (message.content.fileType == FileTypeEnum.NONE)
		//		{
		//			var pdfPageSetting = new PdfPageSettings();

		//			if (message.content.width > 0)
		//			{
		//				pdfPageSetting.Width = message.content.width * CM_1;
		//			}

		//			if (message.content.height > 0)
		//			{
		//				pdfPageSetting.Height = message.content.height * CM_1;
		//			}

		//			var pdfFormat = new PdfHtmlLayoutFormat();

		//			var thread = new Thread(() =>
		//			{
		//				pdf.LoadFromHTML(message.content.body, false, pdfPageSetting, pdfFormat);

		//			});

		//			// set to single thread
		//			thread.SetApartmentState(ApartmentState.STA);
		//			thread.Start();
		//			thread.Join();

		//		}
		//		else if (message.content.fileType == FileTypeEnum.IMG)
		//		{
		//			var stream = HttpHelper.GetHttpStream(message.content.body);

		//			var pdfImage = PdfImage.FromStream(stream);

		//			pdf.PageSettings.Width = message.content.width == 0 ? pdfImage.Width : message.content.width * CM_1;
		//			pdf.PageSettings.Height = message.content.height == 0 ? pdfImage.Height : message.content.height * CM_1;

		//			var width = pdf.PageSettings.Width;
		//			var height = pdf.PageSettings.Height;

		//			var page = pdf.Pages.Add();

		//			page.Canvas.DrawImage(pdfImage, new PointF() { X = 0, Y = 0 }, new SizeF { Width = width * 2 / 3, Height = height * 2 / 3 });
		//		}
		//		else
		//		{
		//			var stream = HttpHelper.GetHttpStream(message.content.body);

		//			pdf.LoadFromStream(stream);
		//		}

		//		//pdf.SaveToFile("D://bb.pdf");

		//		if (message.content.paperHeight > 0 && message.content.paperWidth > 0)
		//		{
		//			PaperSize paper = new PaperSize("Custom", (int)(message.content.paperWidth / INCH_1 * 100), (int)(message.content.paperHeight * 100));
		//			paper.RawKind = (int)PaperKind.Custom;
		//			pdf.PrintSettings.PaperSize = paper;
		//		}

		//		pdf.PrintSettings.PrinterName = message.content.device;
		//		pdf.PrintSettings.Copies = message.content.printQty;
		//		pdf.PrintSettings.PrintController = new StandardPrintController();
		//		pdf.PrintSettings.SelectSinglePageLayout(PdfSinglePageScalingMode.FitSize, false);

		//		pdf.Print();

		//		return true;
		//	}
		//	catch (Exception ex)
		//	{
		//		LogHelper.Error("PrintFile异常" + ex.Message + ex.InnerException?.Message ?? "");

		//		return false;
		//	}
		//	finally
		//	{
		//		pdf?.Close();
		//		pdf?.Dispose();
		//	}
		//}
	}
}
